package proxy

import "fmt"

// 代理模式和装饰器模式差不多
// 只是代理模式的管理依赖的生命周期有代理对象管理 装饰器由客户端决定

type ThirdProdApi interface {
	GetProdList()
}

type TmProdApi struct {
}

func (tm TmProdApi) GetProdList() {
	fmt.Println("请求原始数据")
}

// 代理类
type TmProdApiProxy struct {
	api ThirdProdApi
}

func NewTmProdApiProxy(api ThirdProdApi) TmProdApiProxy {
	return TmProdApiProxy{api: api}
}

func (tp TmProdApiProxy) CacheSource() {
	fmt.Println("最新数据缓存到数据库")
}

func (tp TmProdApiProxy) Format() {
	fmt.Println("格式化数据")
}

func (tp TmProdApiProxy) GetProdList() {
	tp.api.GetProdList()
	// 最新的数据缓存数据库
	tp.CacheSource()
}
